Spring Security এবং WebClient-এর ইন্টিগ্রেশন ব্যবহার করে আপনি সুরক্ষিত HTTP রিকুয়েস্ট পরিচালনা করতে পারেন। এটি প্রায়ই OAuth2, JWT, Basic Authentication, বা API Key ব্যবহার করে নিরাপদ অ্যাপ্লিকেশন তৈরি করতে ব্যবহৃত হয়।
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-webflux</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-security</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.security</groupId>
<artifactId>spring-security-oauth2-client</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.security</groupId>
<artifactId>spring-security-oauth2-jose</artifactId>
</dependency>
WebClient
-এ Spring Security কনফিগার করতে ServerOAuth2AuthorizedClientExchangeFilterFunction
ব্যবহার করতে হবে।
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.security.oauth2.client.registration.ClientRegistrationRepository;
import org.springframework.security.oauth2.client.web.reactive.function.client.ServerOAuth2AuthorizedClientExchangeFilterFunction;
import org.springframework.web.reactive.function.client.WebClient;
@Configuration
public class WebClientConfig {
@Bean
public WebClient webClient(ClientRegistrationRepository clientRegistrationRepository,
org.springframework.security.oauth2.client.web.server.ServerOAuth2AuthorizedClientRepository authorizedClientRepository) {
ServerOAuth2AuthorizedClientExchangeFilterFunction oauth2 =
new ServerOAuth2AuthorizedClientExchangeFilterFunction(clientRegistrationRepository, authorizedClientRepository);
oauth2.setDefaultOAuth2AuthorizedClient(true);
return WebClient.builder()
.filter(oauth2)
.build();
}
}
OAuth2 ক্লায়েন্ট কনফিগারেশনের জন্য application.yml
এ নিচের সেটিংস যোগ করুন:
spring:
security:
oauth2:
client:
registration:
my-client:
client-id: your-client-id
client-secret: your-client-secret
authorization-grant-type: client_credentials
scope: read
provider:
my-provider:
token-uri: https://example.com/oauth/token
WebClient
Bean ব্যবহার করে সুরক্ষিত API কল করতে পারেন।
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;
import reactor.core.publisher.Mono;
@RestController
public class ApiController {
@Autowired
private WebClient webClient;
@GetMapping("/secure-api")
public Mono<String> callSecureApi() {
return webClient.get()
.uri("https://api.example.com/secure-data")
.retrieve()
.bodyToMono(String.class);
}
}
@GetMapping("/post-secure")
public Mono<String> postSecure() {
return webClient.post()
.uri("https://api.example.com/secure-endpoint")
.bodyValue(new MyRequest("data"))
.retrieve()
.bodyToMono(String.class);
}
static class MyRequest {
private String value;
public MyRequest(String value) {
this.value = value;
}
// Getters and setters
}
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.web.reactive.function.client.WebClient;
@Configuration
public class WebClientBasicAuthConfig {
@Bean
public WebClient webClientWithBasicAuth() {
return WebClient.builder()
.defaultHeaders(headers -> headers.setBasicAuth("username", "password"))
.build();
}
}
@GetMapping("/basic-auth-api")
public Mono<String> basicAuthApi() {
return webClientWithBasicAuth.get()
.uri("https://api.example.com/basic-auth")
.retrieve()
.bodyToMono(String.class);
}
@Bean
public WebClient webClientWithJwt() {
return WebClient.builder()
.defaultHeaders(headers -> headers.setBearerAuth("your-jwt-token"))
.build();
}
@GetMapping("/jwt-auth-api")
public Mono<String> jwtAuthApi() {
return webClientWithJwt.get()
.uri("https://api.example.com/jwt-secure")
.retrieve()
.bodyToMono(String.class);
}
Spring Security এবং WebClient এর ইন্টিগ্রেশন আপনাকে সুরক্ষিত HTTP কল সহজে পরিচালনা করতে সাহায্য করে। আপনি OAuth2, Basic Auth বা JWT Token ব্যবহার করে বিভিন্ন ধরণের নিরাপত্তা সমর্থিত API কল করতে পারবেন।
Read more